<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 优化的思路，原本要交换8趟，但是在第4趟，两两元素没有进行交换了，就可以停止不需要进行交换了
      // 通过一个变量，只要进行了交换，这个变量就是false，否则是true，是true 就return
      function swap(arr, i, j) {
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
      // 2 排序
      function BubbleSort(nums) {
        let len = nums.length;
        // 外面for循环 表示走几趟，走 len-1趟，[5, 3, 2, 1] 走三趟
        for (let i = 0; i < len - 1; i++) {
          // debugger
          // 这个优化的思路是，但凡 下面的交换有一次进行了 isSorted就是false 如果是true 表示一次都没有进行 就没有必要再走了
          let isSorted = true;
          // 里面的for循环 表示 每一趟走多少次，长度 - i - 1 而i表示当前是第几趟
          for (let j = 0; j < len - i - 1; j++) {
            // debugger
            if (nums[j] > nums[j + 1]) {
              swap(nums, j, j + 1);
              isSorted = false;
            }
          }
          if (isSorted) {
            break;
          }
        }
        return nums;
      }
      // console.log(BubbleSort([5, 8, 6, 3, 9, 2, 1, 7]));
      // console.log(BubbleSort([5, 2, 1, 6, 3, 7, 8, 9]));
      // console.log(BubbleSort([5, 2, 1, 6, 3, 10, 9, 8]));
      // console.log(BubbleSort([3, 4, 2, 1, 5, 6, 7, 8]));
      // let arr = []
      // for (let i = 2; i < 10; i++) {
      //     arr.push(i)
      // }
      // console.time('排序')
      // console.log(BubbleSort([...arr, 1]));
      // console.timeEnd('排序')
    </script>
  </body>
</html>
